//
//  NSObject+QTSwizzle.h
//  QTCategory
//
//  Created by 张俊博 on 2017/2/8.
//  Copyright © 2017年 CISDI. All rights reserved.
//

#import <Foundation/Foundation.h>

//typedef NS_OPTIONS(NSUInteger, QTSwizzleOptions) {
//    QTSwizzlePositionAfter   = 0,
//    QTSwizzlePositionInstead = 1,
//    QTSwizzlePositionBefore  = 2,
//    
//    QTSwizzleOptionAutomaticRemoval = 1 << 3
//};
//
//typedef NS_ENUM(NSUInteger, QTSwizzleErrorCode) {
//    QTSwizzleErrorSelectorBlacklisted,
//    QTSwizzleErrorDoesNotRespondToSelector,
//    QTSwizzleErrorSelectorDeallocPosition,
//    QTSwizzleErrorSelectorAlreadyHookedInClassHierarchy,
//    QTSwizzleErrorFailedToAllocateClassPair,
//    QTSwizzleErrorMissingBlockSignature,
//    QTSwizzleErrorIncompatibleBlockSignature,
//    
//    QTSwizzleErrorRemoveObjectAlreadyDeallocated = 100   
//};
//
//extern NSString *const QTSwizzleErrorDomain;
//
//@protocol QTSwizzleToken <NSObject>
//
//- (BOOL)remove;
//
//@end
//
//@protocol QTSwizzleInfo <NSObject>
//
//- (id)instance;
//
//- (NSInvocation *)originalInvocation;
//
//- (NSArray *)arguments;
//
//@end
//
//@interface NSObject (QTSwizzle)
//
//+ (id<QTSwizzleToken>)swizzle_hookSelector:(SEL)selector
//                               withOptions:(QTSwizzleOptions)options
//                                usingBlock:(id)block
//                                     error:(NSError **)error;
//
//- (id<QTSwizzleToken>)swizzle_hookSelector:(SEL)selector
//                               withOptions:(QTSwizzleOptions)options
//                                usingBlock:(id)block
//                                     error:(NSError **)error;
//
//@end
